<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
	</body>
	
	<script>
	
		//2 DOM2级xml(ie9以上以及其他浏览器都支持)
		
		//createDocument()方法需要传递三个参数，命名空间（留空），根标签名和文档声明  
		var xmlDom = document.implementation.createDocument('','root',null);//创建xmlDOM(提供了<root></root>根标签)
	/*	alert(xmlDom);
		alert(xmlDom.documentElement.tagName);
		alert(xmlDom.getElementsByTagName('root')[0].tagName);*/
		
		//使用标准DOM去创建节点
		var user = xmlDom.createElement('user');
		xmlDom.documentElement.appendChild(user);//添加到user下
		alert(xmlDom.getElementsByTagName('user')[0].tagName);
		
		//由于DOM2中不支持loadXML()方法，所以无法简易的直接创建xml字符串，
		
		
		
	/*	//使用同步载入xml文件
		var xmlDom01 = document.implementation.createDocument('','root',null);
		xmlDom01.async = false;//同步
		xmlDom01.load('xmlDomText.xml');//火狐
		alert(xmlDom01.getElementsByTagName('user')[0].tagName);
		alert(xmlDom01.getElementsByTagName('user')[0].textContent);//相当于xhtml节点中的innerHTML
		//DOM2级没有 .xml属性来序列化xml字符*/
	
	
/*	//异步加载xml
	var xmlDom02 = document.implementation.createDocument('','root',null);
	xmlDom02.async = true;//默认异步
	xmlDom02.onload = function(){//异步加载采用onload
		alert(xmlDom02.getElementsByTagName('user')[0].textContent);//输出
	}
	xmlDom02.load('xmlDomText.xml');//载入文件*/
	
	//ps: load()方法只支持FireFox和新版本的opera浏览器，其他浏览器不支持
	
	
	//3 DOMParser 类型
	//由于DOM2没有loadXML()方法直接解析xml字符串所以提供了DOMParser 类型来创建XML DOM 对象。 ie9、safair、chrome、opera都支持
	
	//模拟loadXML()方法可以简易创建xml字符串
	var xmlParser = new DOMParser();//创建DOMParser对象
	var xmlStr = '<root>\n<user>zhansan</user>\n</root>';//xml字符串
	var xmlDomP = xmlParser.parseFromString(xmlStr,'text/xml');//[object XMLDocument]
	alert(xmlDomP);
	
	// 4 XMLSerializer类型
	//由于DOM2没有序列化XML的属性，所以提供了XMLSerializer类型来帮助序列化XML字符串。ie9、safair、chrome、opera都支持
	
	//模拟 .xml属性序列化字符串
	 var serializer = new XMLSerializer();//创建对象
	 var xml = serializer.serializeToString(xmlDomP);//序列化
	
	
	
	//5解析错误
	//在DOM2级处理XML发生错误时，并没有提供特有的对象捕获错误，而是直接生产另一个错误的xml文档，通过这个文档可以获取错误信息。
	
	var errors = xmlDomP.getElementsByTagName('parsererror');//得到解析错误标签的信息
	var Iferrors =xmlDomP.documentElement.nodeName=="parsererror";//布尔值
	//if(errors.length==0){
	if(Iferrors){
	 alert(xml);//正确打印
	}else{

		throw new Error('手动抛出错误信息：'+errors[0].textContent);
	}
	
	
	</script>
</html>
